//===================================================================
// 项目名 : Hbt.Cur
// 文件名 : HbtIdentityCollectionExtensions.cs
// 创建者 : Claude
// 创建时间: 2025-01-11
// 版本号 : V0.0.1
// 描述    : 身份认证服务集合扩展
//===================================================================

using Hbt.Application.Services.Identity;
using Hbt.Domain.IServices.Security;
using Hbt.Infrastructure.Authentication;
using Hbt.Infrastructure.Identity;
using Hbt.Infrastructure.Security;

namespace Hbt.Infrastructure.Extensions
{
    /// <summary>
    /// 身份认证服务集合扩展
    /// </summary>
    /// <remarks>
    /// 此类用于集中管理和注册身份认证相关的所有服务，包括：
    /// 1. 核心身份认证服务 - 登录、JWT处理、设备管理等
    /// 2. 短信和二维码认证服务 - 短信验证、二维码登录等
    /// 3. 用户和权限管理服务 - 用户、角色、部门、岗位、菜单等
    /// </remarks>
    public static class HbtIdentityCollectionExtensions
    {
        /// <summary>
        /// 添加身份认证服务
        /// </summary>
        /// <remarks>
        /// 注册身份认证相关的所有服务，包括：
        /// 1. 核心身份认证服务 - 登录、JWT处理、设备管理等
        /// 2. 短信和二维码认证服务 - 短信验证、二维码登录等
        /// 3. 用户和权限管理服务 - 用户、角色、部门、岗位、菜单等
        /// </remarks>
        /// <param name="services">服务集合</param>
        /// <returns>服务集合</returns>
        public static IServiceCollection AddIdentityServices(this IServiceCollection services)
        {
            // 核心身份认证服务
            services.AddScoped<IHbtAuthService, HbtAuthService>();         // 登录服务

            services.AddScoped<IHbtJwtHandler, HbtJwtHandler>();            // JWT令牌处理
            services.AddScoped<IHbtDeviceIdGenerator, HbtDeviceIdGenerator>(); // 设备ID生成器





            // 短信和二维码认证服务已移除


            // 用户和权限管理
            services.AddScoped<IHbtUserService, HbtUserService>();          // 用户管理
            services.AddScoped<IHbtRoleService, HbtRoleService>();          // 角色管理
            services.AddScoped<IHbtDeptService, HbtDeptService>();          // 部门管理
            services.AddScoped<IHbtPostService, HbtPostService>();          // 岗位管理
            services.AddScoped<IHbtMenuService, HbtMenuService>();          // 菜单管理

            // 安全策略服务
            services.AddScoped<IHbtLoginPolicy, HbtLoginPolicy>();          // 登录策略
            services.AddScoped<IHbtPasswordPolicy, HbtPasswordPolicy>();    // 密码策略

            // 会话管理服务
            services.AddScoped<IHbtIdentitySessionManager, HbtSessionManager>(); // 身份会话管理器
            services.AddScoped<IHbtSingleUserLoginService, HbtSingleUserLoginService>(); // 单用户登录服务

            // 验证服务
            services.AddScoped<IHbtCaptchaService, HbtCaptchaService>();    // 验证码服务
            // OAuth服务已移除

            // 找回密码服务
            services.AddScoped<IHbtForgetService, HbtForgetService>();      // 找回密码服务

            return services;
        }
    }
}
